# -*- coding: utf-8 -*-
# autor: Joao Guerreiro 13730
# data: 1 de Dezembro de 2014
# obs.: Projecto Python de LP - classe Estatistica
#

import sqlite3
from matplotlib import pyplot


class Estatistica:
    bd = sqlite3.connect('basedados.db')

    def __init__(self, num1, num2, tipo):
        self.num1 = num1
        self.num2 = num2
        self.tipo = tipo
        self.lista_da_classe = []

    def cria_estat(self):
        '''
        funcao que atraves do intervalo de tempo seleccionado, efectua
        a query e retorna a lista de valores
        '''
        lista_valores = []

        def ipc():
            '''
            estatistica ipc
            '''
            for linha in self.bd.execute(
            "SELECT ano,ipc FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def inf():
            '''
            estatistica taxa inflacao
            '''
            for linha in self.bd.execute(
            "SELECT ano,variacao_anual FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def rmin():
            '''
            estatistica remuneracao minima mensal dos funcionarios
            publicos
            '''
            for linha in self.bd.execute(
            "SELECT ano,rmin FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def rmax():
            '''
            estatistica remuneracao maxima mensal dos funcionarios
            publicos
            '''
            for linha in self.bd.execute(
            "SELECT ano,rmax FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def pib():
            '''
            estatistica do produto interno bruto
            '''
            for linha in self.bd.execute(
            "SELECT ano,pib FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def rna():
            '''
            estatistica rendimento nacional anual bruto per capita
            '''
            for linha in self.bd.execute(
            "SELECT ano,rendim_nacional FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def rda():
            '''
            estatistica rendimento disponivel anual bruto per capita
            '''
            for linha in self.bd.execute(
            "SELECT ano,rendim_disp FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def rca():
            '''
            estatistica da remuneracoes per capita anuais
            '''
            for linha in self.bd.execute(
            "SELECT ano,remun_capita FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        def rmin_max():
            '''
            estatistica das evolucoes das remuneracoes maximas e
            minimas mensais
            '''
            for linha in self.bd.execute(
            "SELECT ano,rmin,rmax FROM IPC_PORTUGAL WHERE ano>=? AND ano<=?",
            (self.num1, self.num2)):
                lista_valores.append(linha)

        opcoes = {1: ipc,
            2: inf,
            3: rmin,
            4: rmax,
            5: pib,
            6: rna,
            7: rda,
            8: rca,
            9: rmin_max
            }
        opcoes[self.tipo]()
        self.lista_da_classe = lista_valores
        return lista_valores

    def cria_grafico(self):
        '''
        funcao que cria os graficos dependendo
        do tipo de estatistica (matplotlib)
        '''
        x = []
        y = []
        z = []

        if self.tipo == 9:
            for i in self.lista_da_classe:
                tup = i
                x.append(tup[0])
                y.append(tup[1])
                z.append(tup[2])
                pyplot.plot(x, y, x, z)
                pyplot.xlabel('Anos')
                pyplot.ylabel('Valores')
                pyplot.savefig('graph.png')
                pyplot.clf()
        else:
            for i in self.lista_da_classe:
                tup = i
                x.append(tup[0])
                y.append(tup[1])
                pyplot.plot(x, y)
                pyplot.xlabel('Anos')
                pyplot.ylabel('Valores')
                pyplot.savefig('graph.png')
                pyplot.clf()
